package com.lkd.service.impl;

import cn.hutool.core.bean.BeanUtil;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.lkd.dto.SkuDto;
import com.lkd.mapper.SkuMapper;
import com.lkd.result.PageBean;
import com.lkd.service.SkuService;
import com.lkd.vo.SkuClassVo;
import com.lkd.vo.SkuVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @className: SkuServiceImpl
 * @description:
 * @author: InnovatorX
 * @date: 2024/5/28 14:16
 * @Version: 1.0
 */
@Service
@Slf4j
public class SkuServiceImpl implements SkuService {
    @Autowired
    private SkuMapper skuMapper;
    @Autowired
    private SkuClassServiceImpl skuClassService;

    @Override
    public PageBean<SkuVo> search(String skuName, Integer pageIndex, Integer pageSize) {
         // 分页处理
        PageHelper.startPage(pageIndex,pageSize);
        // 查询数据集合
        List<SkuVo> skuVoList = skuMapper.search(skuName);
        for (SkuVo skuVo : skuVoList) {
            Integer classId = skuVo.getClassId();
            SkuClassVo byId = skuClassService.getById(classId);
            skuVo.setSkuClass(byId);
        }
        Page<SkuVo> vos = (Page<SkuVo>) skuVoList;
        /**
         * 创建并返回一个PageBean实例。
         * PageBean封装了分页查询的结果，包括当前页码、每页大小、总记录数、总页数和查询结果。
         * getPageNum()：返回当前页面的页码。在分页中，第一页通常是1。
         * getPageSize()：返回每页显示的记录数。例如，如果设置为10，则每页显示10条记录。
         * getTotal()：返回所有匹配查询条件的记录总数。
         * getPages()：根据总记录数和每页大小计算出总页数。如果总记录数除以每页大小有余数，总页数会向上取整。
         * getResult()：返回实际的查询结果集合，即当前页的数据列表。
         * @param vos 分页查询参数和结果的封装，包含当前页码、每页大小、总记录数、总页数和查询结果。
         * @return 返回一个初始化好的PageBean<SkuVo>实例，其中SkuVo为查询结果的类型。
         */
//        PageBean<SkuVo> pageBean = new PageBean<>();
//        pageBean.setTotalCount(vos.getTotal());
//        pageBean.setCurrentPageRecords(vos.getResult());
//        pageBean.setPageIndex(vos.getPageNum());
//        pageBean.setPageSize(vos.getPageSize());
//        pageBean.setTotalPage((long) vos.getPages());
//        return pageBean;
        return new PageBean<SkuVo>(vos.getPageNum(),vos.getPageSize(),Long.valueOf(vos.getPages()),vos.getTotal(),vos.getResult());
    }

    @Override
    public void saveSku(SkuDto dto) {
        skuMapper.saveSku(dto);
    }

    @Override
    public SkuVo getById(Long skuId) {
        return skuMapper.getById(skuId);
    }

    @Override
    public void update(SkuDto dto) {
        SkuVo bean = BeanUtil.toBean(dto, SkuVo.class);
        skuMapper.update(bean);
    }
}
